;(function(){
    var username =$('#username');
    var password = $('#password');
    var pawcheck = $('#passwordcheck');
    var form = $('#registerform');
    //性别
    var radio = $('.radio');
    //联系人姓名
    var name = $('#name');
    var mobile=$('#mobile');
    var submit = $('#submitsub');
    //短信验证码发送按钮
    var mobileCode = $('#send_mobile_code');
    //验证码输入框
    var checkcode = $('#mobileVerificationCode');
   
    var radioInput = radio.children();
    var usr_tip=username.parent().siblings(".c3");
    var paw_tip = password.parent().siblings(".c3");
    var pawcheck_tip = pawcheck.parent().siblings(".c3");
    var name_tip=name.parent().siblings(".c3");
    var mobile_tip=mobile.parent().siblings(".c3");
    var mobileCode_tip=mobileCode.parent().siblings(".c3");
    //验证：用户名，密码，确认密码，用户姓名，电话号码正则匹配对了就可以注册了
    var mandatoryList = [usr_tip,paw_tip,pawcheck_tip,name_tip,mobile_tip] 
    
    function success(input,tipEle){
        //提示图标
        var icon = tipEle.children(".icon");
        icon.removeClass("error_c3");
        icon.addClass("successVer");
        tipEle.children(".tip").html("");
        //去掉错误时输入框的红色
        input.removeClass("errorInput");
    }
    function error(tip,input,tipEle){
        //去掉successVer；
        var icon = tipEle.children(".icon");
        input.addClass("errorInput");
        icon.removeClass("successVer");
        icon.addClass("error_c3");
        tipEle.children(".tip").html(tip);
    }
    //  /((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]))(?!^.*[\u4E00-\u9FA5].*$)^\S{6,16}$/
    //  验证密码，至少为字母、数字、符号两种组成，不包含空格,不能输入中文
    //  /^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$).{6,20}$/,//数字+字母，数字+特殊字符，字母+特殊字符，数字+字母+特殊字符组合，而且不能是纯数字，纯字母，纯特殊字符
    //  ^(?![A-Z]+$)(?![a-z]+$)(?!\d+$)(?![\W_]+$)\S{6,16}$  ,//密码是否含有小写字母、大写字母、数字、特殊符号的两种及以上
    var regList = {
        "usrReg" :/^[A-Za-z0-9]{4,20}$/,//4-20位数字或者字母
        "pawReg" : /((?=.*\d)(?=.*\D)|(?=.*[a-zA-Z])(?=.*[^a-zA-Z]))(?!^.*[\u4E00-\u9FA5].*$)^\S{6,16}$/,
        "pureNumber":/^\d+$/i,
        "phoneNumber":/^1(3|4|5|7|8)\d{9}$/,
        "maxlength4" : /^.{0,3}$/,
        "minlength4" : /^.{3,20}$/,
        "hasNumber" : /\d/,
        "hasLetter" : /[a-zA-Z]/,
        "hasSC" : /[\!\@\#\$\%\^]/,
        "minlength6" : /^.{0,6}$/
    }
   
    // // 验证正则成功与否;
    function validate(str,reg){
        return reg.test(str);
    }
    //验证用户名
    function validateUser(){
        var userValue =username.val();
        if(!validate(userValue,regList.usrReg)){
            return error("请输入4-20位以上的数字或字母",username,usr_tip);
        }
        success(username,usr_tip);
    }
    //验证密码
    function validatePaw(){
        var pawValue = password.val();
        if(seriNum(pawValue)){
            return error("密码不能有连续的数字",password,paw_tip);
        }
        if(validate(pawValue,regList.pureNumber)){
            return error("密码不能是纯数字",password,paw_tip);
        }
        if(!validate(pawValue,regList.pawReg)){
            return error("密码格式不正确",password,paw_tip);
        }
        success(password,paw_tip);
        chackPaw("next");
    }
    //确认密码
    function chackPaw(){
        var chackValue = pawcheck.val();
        var pawValue = password.val();
        //为了防止输入错误密码时确认密码一致，所以在输入密码完成以后调用了一次确认密码并且在里面传了一个值；
        if(arguments === "next"){
            if(!chackValue){
                return ;
            }
        }
        if(!chackValue){
            return error("请再次输入密码",pawcheck,pawcheck_tip);
        }
        if(!(chackValue === pawValue)){
            return error("两次密码输入不一致",pawcheck,pawcheck_tip);
        }
        success(pawcheck,pawcheck_tip);
    }
    //判断字符串中是否有连续数字的方法
    function seriNum(str){
        for(var i=0;i<str.length;i++){
            if(i>0 && str.charAt(i) == parseInt(str.charAt(i-1))+1){
                return true;
            }
        }
    }
    //选择性别
    function choseId(){
       $(this).parent().siblings().removeClass("checked");
       $(this).parent().addClass("checked");
    }
    //验证联系人姓名
    function validateName(){
        var nameValue=name.val();
        if(!nameValue){
            return error("联系人姓名不能为空",name,name_tip);
        }
        success(name,name_tip);
    }
    //验证电话号码
    function telephone(){
        var phoneValue = mobile.val();
        if(!validate(phoneValue,regList.phoneNumber)){
           return error("手机号码格式不正确",mobile,mobile_tip);
        }
        success(mobile,mobile_tip);
    }
    //点击提交
    function jsonp(url,cb_key,data){
        cb_key = !cb_key ? "callback" : cb_key; 
        data = !data ? {} : data;
        return new Promise((resove,reject)=>{
              var cb_name = "gp10" + Date.now();
              window[cb_name] = function(res){
                    resove(res);
              } 
              var script = document.createElement("script");
              url += /\?/.test(url) ? "&" : "?";
              url += cb_key + "=" + cb_name;
              for(let key in data){
                    url += `&${key}=${data[key]}`;
              }
              script.src = url ;
              document.body.appendChild(script);
              script.onload = function(){
                    this.remove();
              }
        })
    }
    function submitMeg(evt){
        if(loading) return false;
        var pawValue = password.val();
        var userValue =username.val();
        for(var i = 0 , ele ; ele = mandatoryList[i++];){
            if(ele.children("p.icon").attr("class").split(" ").indexOf("successVer") === -1){
                ele.siblings(".c2").children("input").focus();
                alert("注册信息不符合规范");
                return ;
            }
        }
        //这里只把用户名和密码保存进数据库了
        jsonp("http://localhost:80/GP10/project/register.php","cb",{
            username :userValue,
            password :pawValue
        })
        .then((res)=>{
            //res是一个字符串
            // "statu" => "error" , "stateCode" => "3" , "errorType" => "insert Error".mysql_error()
            //"statu" => "error" , "stateCode" => "2" , "errorType" => "mySQL error".mysql_error()
            //"statu" => "error" , "stateCode" => "4" , "errorType" => "repeat of user name")
            //"statu" => "success" , "stateCode" => "1" , "password" => $password)
            //{"statu":"error","stateCode":"4","errorType":"repeat of user name"}
           //.split(" ").indexOf("successVer") === -
          //将res转换成对象
          res= JSON.parse(res);
            if(res["statu"] === "error"){
                switch(res["stateCode"]){
                    case("2") : alert("注册失败");
                    break;
                    case("3") : alert("注册失败");
                    break;
                    case("4") : alert("用户名重复,请重新输入");
                    break;
                }
                return ;
            }
            alert("注册成功，点击确定进入到登录页面");
            window.location.href="login.html"; 
        })
    }

    //点击提交表单之前处理的一些东西
    // 该变量表示是否已经发送了请求;
    var loading = false;
    // 阻止表单默认事件;
    form.onsubmit = function(evt){
        var e = evt || window.event;
        e.preventDefault();
    }

    //点击获取验证码
    function checkMobileCode(){
        var mobilenum = mobile.val();
        //判断手机号是否输入
        var cName = mobile_tip.children("p.icon").attr("class").split(" ");
        if(cName.indexOf("successVer") == -1){
            alert("请输入手机号");
            return ;
        }
        jsonp("http://localhost:80/GP10/project/mobilecode.php","cb",{
            phonenum : mobilenum
        })
        .then((res)=>{
            success(mobileCode,mobileCode_tip);
            //成功以后 1、开始计时90s以后重新发送
            countDown();
            console.log(res);
        })
    }
    //倒计时
    function countDown(){
        var clock = "";
        var nums = 90;
        //mobileCode
        mobileCode.attr("disabled",true);
        mobileCode.val(nums+"秒后可以重新获取");
        clock = setInterval(()=>{
            nums --;
            if(nums>0){
                mobileCode.val(nums+"秒后可以重新获取");
            }else{
                clearInterval(clock);
                mobileCode.attr("disabled",false);
                mobileCode.val("点击重新发送验证码");
                nums = 90;
            }
        },1000)
    }

    //输入验证码时检验验证码,把验证码和手机号放入数据库，等点击提交按钮的时候再取出来进行对比
    function proofreadCode(){
        var mobilenum = mobile.val();
        var codeValue = checkcode.val();
        //判断手机号是否输入
        var cName = mobile_tip.children("p.icon").attr("class").split(" ");
        if(!codeValue){
            return ;
        }
        if(cName.indexOf("successVer") == -1){
            alert("请输入手机号");
        }
        jsonp("http://localhost:80/GP10/project/checkcode.php","cb",{
            phonenum : mobilenum,
            checkcode : codeValue
        })
        .then((res)=>{
            console.log("验证码输入正确！已经放入数据库");
            console.log(res);
        })
    }

    username.blur(validateUser);
    password.blur(validatePaw);
    pawcheck.blur(chackPaw);
    //选择性别
    radioInput.click(choseId);
    //姓名验证
    name.blur(validateName);
    //电话号码验证
    mobile.blur(telephone);
    //点击提交
    submit.click(submitMeg);
    //点击获取验证码
    mobileCode.click(checkMobileCode);
    //输入验证码
    checkcode.blur(proofreadCode);
    
})(jQuery);